import 'package:flutter_09_game/utils/log/utils_log.dart';
import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';

class UtilsApiChecker {
  // final isConnected = await connection.hasInternetAccess;
  /// 检测传入的域名哪些可用
  /// [apis] 需要检测的域名列表
  /// [timeout] 单个域名检测的超时时间，默认10秒
  /// 返回可用的域名列表
  static Future<List<String>> checkAvailableApis(
    List<String> apis,
    // {
    // Duration? timeout,
    // }
  ) async {
    if (apis.isEmpty) return [];
    // 并发检测所有域名
    final List<Future<String?>> futures = apis.map((api) {
      return _checkSingleApi(api, timeout: const Duration(seconds: 20));
    }).toList();

    // 等待所有检测完成
    final List<String?> results = await Future.wait(futures);

    // 过滤出可用的域名
    final List<String> availableApis =
        results.where((result) => result != null).cast<String>().toList();

    return availableApis;
  }

  /// 快速检测单个API（用于竞速模式）
  /// [api] 要检测的域名
  /// [timeout] 检测超时时间，默认5秒
  /// 返回可用的域名，如果不可用则返回null
  static Future<String?> checkSingleApiWithSpeed(
    String api, {
    Duration? timeout,
  }) async {
    return _checkSingleApi(api, timeout: timeout ?? const Duration(seconds: 5));
  }

  /// 检测单个域名是否可用
  /// [api] 要检测的域名
  /// [timeout] 检测超时时间
  /// 返回可用的域名，如果不可用则返回null
  static Future<String?> _checkSingleApi(
    String api, {
    required Duration timeout,
  }) async {
    try {
      // 为单个域名创建检测实例
      final InternetConnection internetChecker =
          InternetConnection.createInstance(
        customCheckOptions: [
          InternetCheckOption(
            uri: Uri.parse(api),
            responseStatusFn: (response) {

              clog('daslkjdlkas  ${response.request?.url}   ${response.statusCode}');
              // return response.statusCode == 200;
              return response.statusCode == 200 || response.statusCode == 404 || response.statusCode == 502;
            }
          ),
        ],
        useDefaultOptions: false,
      );

      // 检测连接性，添加超时控制
      final bool isConnected =
          await internetChecker.hasInternetAccess.timeout(timeout);
      // .timeout(timeout);
      clog('isConnected    $isConnected   $api');
      return isConnected ? api : null;
    } catch (e) {
      // 捕获所有异常（网络错误、超时等），返回null表示不可用
      return null;
    }
  }
}
